package br.com.pizzaria.control;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import org.hibernate.Query;
import org.hibernate.Session;

import br.com.pizzaria.hDAO.SessaoFactory;
import br.com.pizzaria.model.Cliente;
import br.com.pizzaria.model.Pagamento;
import br.com.pizzaria.model.Pedido;
import br.com.pizzaria.model.Produto;
import br.com.pizzaria.model.Usuario;
import br.com.pizzaria.model.dao.PedidoDAO;

@ManagedBean
@ViewScoped
public class PedidoBean implements Serializable {

	private static final long serialVersionUID = 1L;

	private Cliente cliente;
	private Produto produto;
	private Pedido pedido;
	private PedidoDAO dao;
	private List<Produto> listaProdutos;
	private Session session;
	private float total;

	public PedidoBean() {
		dao = new PedidoDAO();
		zerar();
	}

	private void zerar() {
		total = 0;
		cliente = new Cliente();
		pedido = new Pedido();
		produto = new Produto();
		listaProdutos = new ArrayList<Produto>();
	}

	@SuppressWarnings("unchecked")
	public List<Cliente> completeClient(String name) {
		session = SessaoFactory.getSessionFactory().getCurrentSession();
		String hql = "from Cliente where nome like '" + name + "%'";
		Query query = session.createQuery(hql);
		List<Cliente> lista = (List<Cliente>) query.list();
		return lista;
	}

	@SuppressWarnings("unchecked")
	public List<Produto> completeProduct(String name) {
		session = SessaoFactory.getSessionFactory().getCurrentSession();
		String hql = "from Produto where nome like '" + name + "%'";
		Query query = session.createQuery(hql);
		List<Produto> lista = (List<Produto>) query.list();
		return lista;
	}

	public void gravar() {
		Usuario usuario = new Usuario();
		usuario.setIdUsuario(1);
		
		Pagamento pagamento = new Pagamento();
		pagamento.setIdPagamento(1);
		
		pedido.setCliente(cliente);
		pedido.setProduto(produto);
		pedido.setUsuario(usuario);
		pedido.setPagamento(pagamento);
		pedido.setValor(total);
		
		dao.cadastrar(pedido);
		
		zerar();
	}

	public void addProduto() {
		getListaProdutos().add(produto);
		total += produto.getPrecoVenda() * produto.getQuantidade();
	}

	public void removeProduto() {
		getListaProdutos().remove(produto);
		total -= produto.getPrecoVenda() * produto.getQuantidade();
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public Produto getProduto() {
		return produto;
	}

	public void setProduto(Produto produto) {
		this.produto = produto;
	}

	public List<Produto> getListaProdutos() {
		return listaProdutos;
	}

	public void setListaProdutos(List<Produto> listaProdutos) {
		this.listaProdutos = listaProdutos;
	}

	public float getTotal() {
		return total;
	}

	public void setTotal(float total) {
		this.total = total;
	}

}
